var yjscRedisManager = require('./yjscRedisManager');
var YjxUniItemsModel = require('../../../../common/yjxMysql/mapping/YjxUniItemsModel');
var CONFIG = require('../../../../common/config');
var moment = require('moment');
var async = require('async');
// 分词模块
var Segment = require('node-segment').Segment;// 载入分词模块
var POSTAG = require('node-segment').POSTAG;// 载入词性接口
var segment = new Segment();// 创建实例
segment.useDefault();// 使用默认的识别模块及字典，载入字典文件需要1秒，仅初始化时执行一次即可




var luaUtil = (function () {

    function luaUtil() {
    }


    /**
     * 从 redis 中搜索统一商品信息
     *
     * @author 王俊
     * @date 2017-11-27
     *
     * @param {Object} param 搜索参数列表
     * @param {Array}  [param.typeLs] 模板大分类showTypes_Id  [2,3,4]
     * @param {Array} [param.keyword] 关键词                促销
     * @param {Array}  [param.vip]  模板vip分类        [0,10]
     * @param {Array}  [param.typeMs]  模板二级分类       [17,18]
     * @param {Array}  [param.typeSs]  模板三级分类        [17,18]
     * @param {Array}  [param.kwdIds]  模板关键词ids       [17,18]
     * @param {Number} param.orderBy 排序字段   1 时间  2 次数  3 order  4 先按order排order相同用更新时间排
     * @param {Number} param.pageNum 页码       1  默认 0开始
     * @param {Number} param.pageSize 每页个数   12
     * @param {Number} [param.withTotalPage] 是否需要返回总页数  0不需要  1需要
     *
     * @param callback      回调
     *          error: 查询失败
     *          data : {
     *              list: 查寻的结果列表
     *              totalPage : 总页数
     *          }
     */
    luaUtil.searchUniItemsFromRedis = function (param, callback) {
        yjscRedisManager.getOnlineSearchRedisDBMgr(function (getMgrErr, scriptMgr) {
            if(getMgrErr) {
                return callback(getMgrErr, null);
            }
            var keys = [];
            var values = [];

            // 1. ARGV[1]:关键词多个逗号拼接
//            if(typeof param.keyword == 'string'){
//                param.keyword = [param.keyword];
//            }
            param.keyword = param.keyword?param.keyword:[];
            values.push(param.keyword.join(','));
            // 2. show_type_id逗号不能为空
            param.typeLs = param.typeLs?param.typeLs:[];
            values.push(param.typeLs.join(','));
            // 3. show_type_id逗号不能为空
            param.typeMs = param.typeMs?param.typeMs:[];
            values.push(param.typeMs.join(','));
            // 4. show_type_id逗号不能为空
            param.typeSs = param.typeSs?param.typeSs:[];
            values.push(param.typeSs.join(','));
            // 5. vip
            param.vip = param.vip?param.vip:[];
            values.push(param.vip.join(','));
            // 6. kwdIds
            param.kwdIds = param.kwdIds?param.kwdIds:[];
            values.push(param.kwdIds.join(','));
            // 7. 排序   1.按时间排(默认desc)  2.按热度排, 3. order 排序
            values.push(param.orderBy);
            // 8. pageNum 页码 0开始
            values.push(param.pageNum);
            // 9. pageSize
            values.push(param.pageSize);

            scriptMgr.run('yjsc_search_query_item', keys, values, function (queryErr, results) {
                if(queryErr || !results) {
                    return callback(queryErr || '搜索失败', null);
                }
//                var errCode = results[0];
//               if(errCode !== 0) {
//                   console.log('yjsc_search_query_item lua errCode: ' + errCode);
//                   return callback(new Error('yjsc_search_query_item lua error'), null);
//                }
                var retData = {
                    list : JSON.parse(results[1] || '[]')
                };
                if (param.withTotalPage) {
                    retData.totalPage = results[2];
                }
                return callback(queryErr, retData);
            });
        });
    };


    /**
     * 分词, 在 luaUtil 中也有一份, 重复是为了避免 util 间相互引用
     *
     * @author 王俊
     * @date 2017-11-27
     *
     * @param txt 待分词内容
     * @param min 可分词的最小长度, 默认2
     * @param max 可分词的最大程度, 默认6
     * @return 分词结果, 字符串数组
     */
    luaUtil.doSegmentOfText = function(txt,min,max){
        if(!txt)    return null;
        // 只能2-6个字以内分词
        min = min || 1;
        max = max || 10;
        if(txt.length>max || txt.length<min){
            return [txt];
        }
        var segs = segment.doSegment(txt);
        var segWords=[];
        for(var i=segs.length-1 ; i>=0;i--){
            var one = segs[i];
            if(one.p !== POSTAG.D_W){//过滤掉标点符号
                // 过滤掉部分词语，例如：色
                var w = one.w.replace(/色/g,'');
                segWords.push(w);
            }
        }
        segWords.push(txt);
        return segWords;
    };

    return luaUtil;
})();

module.exports = luaUtil;